home *** CD-ROM | disk | FTP | other *** search
/ X'Tasies 5 / X'Tasies 5 - Disc 1.iso / pc / qtw20 / setupapi.inc / setupapi.inc
Encoding:
Text File  |  1996-02-27  |  57.0 KB  |  1,879 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_CPUR4000 =  256
  17.  
  18. CONST WF_STANDARD =   16
  19. CONST WF_ENHANCED =   32
  20. CONST WF_WINNT    = 16384
  21.  
  22.  
  23. '' DoMsgBox Flags
  24.  
  25. CONST MB_OK          = 0
  26. CONST MB_ICONHAND    = 16
  27. CONST MB_TASKMODAL   = 8192
  28.  
  29.  
  30. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  31. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  32. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  33. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  34. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  35. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  36. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  37.  
  38. DECLARE FUNCTION AnsiUpperBuff LIB "user" (szBuf$, cbBuf%) AS LONG
  39. DECLARE FUNCTION AnsiLowerBuff LIB "user" (szBuf$, cbBuf%) AS LONG
  40.  
  41.  
  42.  
  43. '**************************************************************************
  44. '****************************** Setup Constants ***************************
  45. '**************************************************************************
  46.  
  47.  
  48. ''Command Option Flags
  49.  
  50. CONST cmoVital       = 1
  51. CONST cmoCopy        = 2
  52. CONST cmoUndo        = 4
  53. CONST cmoRoot        = 8
  54. CONST cmoDecompress  = 16
  55. CONST cmoTimeStamp   = 32
  56. CONST cmoReadOnly    = 64
  57. CONST cmoBackup      = 128
  58. CONST cmoForce       = 256
  59. CONST cmoRemove      = 512
  60. CONST cmoOverwrite   = 1024
  61. CONST cmoAppend      = 2048
  62. CONST cmoPrepend     = 4096
  63. CONST cmoNone        = 0
  64. CONST cmoAll         = 65535
  65.  
  66.  
  67. ''File Exist Modes
  68.  
  69. CONST femExists     = 0
  70. CONST femRead       = 1
  71. CONST femWrite      = 2
  72. CONST femReadWrite  = 3
  73.  
  74.  
  75. ''Read-Only Return Code
  76.  
  77. CONST ynrcNo         = 0
  78. CONST ynrcYes        = 1
  79. CONST ynrcErr1       = 2
  80. CONST ynrcErr2       = 3
  81. CONST ynrcErr3       = 4
  82. CONST ynrcErr4       = 5
  83. CONST ynrcErr5       = 6
  84. CONST ynrcErr6       = 7
  85. CONST ynrcErr7       = 8
  86. CONST ynrcErr8       = 9
  87. CONST ynrcErr9       = 10
  88.  
  89.  
  90. ''General Return Codes
  91.  
  92. CONST grcOkay       = 0
  93. CONST grcNotOkay    = 1
  94. CONST grcUserQuit   = 48
  95.  
  96.  
  97. ''Ranges
  98.  
  99. ''CONST cbSymValMax = 8192
  100. CONST cbSymValMax = 512
  101.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  102.     '' but we get Out of String Space wattdrvr error if we alloc
  103.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  104.     '' We should look into using dynamic far alloc instead of
  105.     '' STRING$ for large buffers.
  106.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  107.  
  108.  
  109. ''ON ERROR Error Codes
  110. CONST STFERR      = 1024   ''setup system error
  111. CONST STFQUIT     = 1025   ''user quit
  112.  
  113. CONST scmOff      = 0
  114. CONST scmOnIgnore = 1
  115. CONST scmOnFatal  = 2
  116.  
  117.  
  118. '**************************************************************************
  119. '********************************  Setup API's  ***************************
  120. '**************************************************************************
  121.  
  122. '' common
  123.  
  124. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  125. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  126. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  127. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  128. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  129. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  130. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  131. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  132. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  133. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  134. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  135. DECLARE FUNCTION DIsDBCSChar LIB "mscomstf.dll" (szText$, iPos%) AS INTEGER
  136.  
  137. DECLARE FUNCTION PbSaveMemInf  LIB "mscomstf.dll" AS LONG
  138. DECLARE SUB      RestoreMemInf LIB "mscomstf.dll" (pb&)
  139. DECLARE SUB      FreeMemInf    LIB "mscomstf.dll" (pb&)
  140.  
  141.  
  142. ''shell
  143.  
  144. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  145. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  146. DECLARE FUNCTION FDoDialogExt LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS INTEGER
  147. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  148. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  149. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  150. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  151. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  152. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  153. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  154. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  155. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  156. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  157.  
  158.  
  159. ''shell
  160.  
  161. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  162. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  163. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  164.  
  165.  
  166.  
  167. ''install
  168.  
  169. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  170. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  173. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  174. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  175. DECLARE FUNCTION AddSrcFileWithAttribsToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  176. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  177. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  179. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  180. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  183. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  184. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  185. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  186. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  187. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  188. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  189. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  190. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  191. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  192. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  193. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  194. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  195. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  196. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  197. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  198. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  199. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  200. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  201. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  202. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  203. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  204. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  205. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  206. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  207.  
  208. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  209. DECLARE SUB ForceRestartOn LIB "msinsstf.dll"
  210. DECLARE FUNCTION DoesAnyFileNeedCopying LIB "msinsstf.dll" AS INTEGER
  211.  
  212.  
  213.  
  214. '*************************************************************************
  215. '****************  Setup Basic Wrapper Declarations  *********************
  216. '*************************************************************************
  217.  
  218.  
  219. ''shell
  220.  
  221. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  222. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  223. DECLARE FUNCTION UIStartDlgExt(szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS STRING
  224. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  225. DECLARE SUB UIPop (n%)
  226. DECLARE SUB UIPopAll
  227. DECLARE SUB SetTitle (sz$)
  228. DECLARE SUB ReadInfFile (szFile$)
  229. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  230. DECLARE SUB RemoveSymbol (szSym$)
  231. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  232. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  233. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  234. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  235. DECLARE SUB AddListItem(szSymbol$, szItem$)
  236. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  237.  
  238.  
  239. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  240. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  241.  
  242. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  243. DECLARE SUB RestoreCursor (hPrev%)
  244.  
  245. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  246. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  247.  
  248. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  249. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  250. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  251. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  252.  
  253. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  254. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  255. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  256. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  257.  
  258.  
  259. ''install
  260.  
  261.  
  262. DECLARE SUB CreateDir (szDir$, cmo%)
  263. DECLARE SUB RemoveDir (szDir$, cmo%)
  264. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  265. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  266. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  267. DECLARE SUB CopyFilesInCopyList
  268. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  269. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  270. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  271. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  272. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  273. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  274. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  275. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  276. DECLARE SUB DumpCopyList (szFile$)
  277. DECLARE SUB ClearCopyList
  278. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  279. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  280. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  281. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  282. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  283. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  284. DECLARE SUB InitInstall
  285. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  286. DECLARE SUB AddBlankToBillboardList (lTicks&)
  287. DECLARE SUB ClearBillboardList
  288. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  289. DECLARE SUB CloseLogFile
  290. DECLARE SUB WriteToLogFile (szStr$)
  291. DECLARE SUB SetCopyGaugePosition (x%, y%)
  292. DECLARE SUB SetRestartDir(szDir$)
  293. DECLARE FUNCTION RestartListEmpty AS INTEGER
  294. DECLARE FUNCTION ExitExecRestart AS INTEGER
  295. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  296. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  297. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  298. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  299. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  300. DECLARE FUNCTION IsDBCSChar (szText$, iPos%) AS INTEGER
  301.  
  302. DECLARE FUNCTION AnsiUpper (szBuf$) AS STRING
  303. DECLARE FUNCTION AnsiLower (szBuf$) AS STRING
  304.  
  305. '' Error Handling
  306.  
  307. '$ifdef DEBUG
  308.  
  309. '' Setup API Errors
  310. CONST saeFail   = 0
  311. CONST saeInit   = 1
  312. CONST saeNYI    = 3
  313. CONST saeArg    = 4    ''must be max sae value
  314.  
  315. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  316. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  317.  
  318. '' chk arg
  319. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  320. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  321. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  322. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  323.  
  324. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  325. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  326.  
  327. '$endif ''DEBUG
  328.  
  329.  
  330.  
  331. '' Windows system detect
  332.  
  333. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  334. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  335. DECLARE FUNCTION GetWindowsMode AS INTEGER
  336. DECLARE FUNCTION GetWindowsDir  AS STRING
  337. DECLARE FUNCTION GetWindowsSysDir AS STRING
  338. DECLARE FUNCTION IsWindowsShared AS INTEGER
  339. DECLARE FUNCTION GetScreenWidth AS INTEGER
  340. DECLARE FUNCTION GetScreenHeight AS INTEGER
  341.  
  342.  
  343. '*************************************************************************
  344. '*****************  Setup Basic Wrapper Definitions  *********************
  345. '*************************************************************************
  346. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  347.     fFrameInit = 0
  348.     fInstallInit = 0
  349.  
  350.     IF hSetup > 0 THEN
  351. '$ifdef DEBUG
  352.         StfApiErr saeInit, "InitSetup", szCmdLine$
  353. '$endif ''DEBUG
  354.     END IF
  355.  
  356.     i% = InitFrame(szCmdLine$)
  357.     fFrameInit = 1
  358.  
  359.     InitInstall
  360.     fInstallInit = 1
  361.  
  362.     InitSetup = i%
  363. END FUNCTION
  364.  
  365.  
  366.  
  367. '**************************************************************************
  368. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  369.     IF hSetup > 0 THEN
  370. '$ifdef DEBUG
  371.         StfApiErr saeInit, "InitFrame", szCmdLine$
  372. '$endif ''DEBUG
  373.     ELSE
  374.         i% = InitializeFrame(szCmdLine$)
  375.         IF i% = -1 THEN
  376.             END   '' NOT an error - Usage (/?) or Command line copy operation
  377.         ELSEIF i% = 0 THEN
  378. '$ifdef DEBUG
  379.             StfApiErr saeFail, "InitFrame", szCmdLine$
  380. '$endif ''DEBUG
  381.             END
  382.         ELSE
  383.             InitFrame = i%
  384.         END IF
  385.     END IF
  386. END FUNCTION
  387.  
  388.  
  389. '**************************************************************************
  390. SUB SetBitmap(szDll$, Bitmap%) STATIC
  391.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  392. '$ifdef DEBUG
  393.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  394. '$endif ''DEBUG
  395.         ERROR STFERR
  396.     END IF
  397. END SUB
  398.  
  399.  
  400. '**************************************************************************
  401. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  402.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  403. '$ifdef DEBUG
  404.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  405. '$endif ''DEBUG
  406.         ERROR STFERR
  407.     END IF
  408. END SUB
  409.  
  410.  
  411. '*************************************************************************
  412. SUB SetTitle(sz$) STATIC
  413.     SetWindowText HwndFrame(), sz$
  414. END SUB
  415.  
  416.  
  417. '*************************************************************************
  418. SUB ReadInfFile (szFile$) STATIC
  419. '$ifdef DEBUG
  420.     if FValidFATPath(szFile$) = 0 then
  421.         BadArgErr 1, "ReadInfFile", szFile$
  422.     end if
  423.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  424.         StfApiErr saeFail, "ReadInfFile", szFile$
  425. '$else  ''!DEBUG
  426.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  427. '$endif ''!DEBUG
  428.         ERROR STFERR
  429.     END IF
  430. END SUB
  431.  
  432.  
  433. '*************************************************************************
  434. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  435. '$ifdef DEBUG
  436.     if szDll$ = "" then
  437.         n% = 1
  438.     elseif szDlgProc$ = "" then
  439.         n% = 3
  440.     else
  441.         n% = 0
  442.     end if
  443.     if n% > 0 then
  444.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  445.     end if
  446. '$endif ''DEBUG
  447.  
  448.     IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szDll$, HelpDlg%, szHelpProc$) = 0 THEN
  449. '$ifdef DEBUG
  450.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  451. '$endif ''DEBUG
  452.         ERROR STFERR
  453.     ELSE
  454.         UIStartDlg = GetSymbolValue("DLGEVENT")
  455.     END IF
  456. END FUNCTION
  457.  
  458.  
  459. '*************************************************************************
  460. FUNCTION UIStartDlgExt(szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) STATIC AS STRING
  461. '$ifdef DEBUG
  462.     if szDll$ = "" then
  463.         n% = 1
  464.     elseif szDlgProc$ = "" then
  465.         n% = 3
  466.     else
  467.         n% = 0
  468.     end if
  469.     if n% > 0 then
  470.         BadArgErr n%, "UIStartDlgExt", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+szHelpDll$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  471.     end if
  472. '$endif ''DEBUG
  473.  
  474.     IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) = 0 THEN
  475. '$ifdef DEBUG
  476.         StfApiErr saeFail, "UIStartDlgExt", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+szHelpDll$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  477. '$endif ''DEBUG
  478.         ERROR STFERR
  479.     ELSE
  480.         UIStartDlgExt = GetSymbolValue("DLGEVENT")
  481.     END IF
  482. END FUNCTION
  483.  
  484.  
  485. '*************************************************************************
  486. SUB UIPop (n%) STATIC
  487.     IF FKillNDialogs(n%) = 0 THEN
  488. '$ifdef DEBUG
  489.         StfApiErr saeFail, "UIPop", STR$(n%)
  490. '$endif ''DEBUG
  491.         ERROR STFERR
  492.     END IF
  493. END SUB
  494.  
  495.  
  496. '*************************************************************************
  497. SUB UIPopAll STATIC
  498.     IF FKillNDialogs(65535) = 0 THEN
  499. '$ifdef DEBUG
  500.         StfApiErr saeFail, "UIPopAll", ""
  501. '$endif ''DEBUG
  502.         ERROR STFERR
  503.     END IF
  504. END SUB
  505.  
  506.  
  507. '*************************************************************************
  508. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  509. '$ifdef DEBUG
  510.     if szSymbol$ = "" then
  511.         BadArgErr 1, "GetSymbolValue", szSymbol$
  512.     end if
  513. '$endif ''DEBUG
  514.     szValue$ = string$(cbSymValMax,32)
  515.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  516.     GetSymbolValue = szValue$
  517.     IF Length% >= cbSymValMax THEN
  518.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  519.         ERROR STFERR
  520.     END IF
  521.     IF szSymbol$ = "" THEN
  522.         ERROR STFERR
  523.     END IF
  524.     szValue$ = ""
  525. END FUNCTION
  526.  
  527.  
  528. '*************************************************************************
  529. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  530. '$ifdef DEBUG
  531.     if szSymbol$ = "" then
  532.         BadArgErr 1, "GetListLength", szSymbol$
  533.     end if
  534. '$endif ''DEBUG
  535.     GetListLength = UsGetListLength(szSymbol$)
  536.     IF szSymbol$ = "" THEN
  537.         ERROR STFERR
  538.     END IF
  539. END FUNCTION
  540.  
  541.  
  542. '*************************************************************************
  543. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  544. '$ifdef DEBUG
  545.     if szListSymbol$ = "" then
  546.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  547.     end if
  548.  
  549.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  550.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  551.     end if
  552. '$endif ''DEBUG
  553.  
  554.     szListItem$ = string$(cbSymValMax,32)
  555.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  556.     GetListItem = szListItem$
  557.     IF Length% >= cbSymValMax THEN
  558.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  559.         ERROR STFERR
  560.     END IF
  561.     IF szListSymbol$ = "" THEN
  562.         ERROR STFERR
  563.     END IF
  564.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  565.         ERROR STFERR
  566.     end if
  567.     szListItem$ = ""
  568. END FUNCTION
  569.  
  570.  
  571. '*************************************************************************
  572. SUB AddListItem(szSymbol$, szItem$) STATIC
  573. '$ifdef DEBUG
  574.     if szSymbol$ = "" then
  575.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  576.     end if
  577. '$endif ''DEBUG
  578.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  579. '$ifdef DEBUG
  580.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  581. '$endif ''DEBUG
  582.         ERROR STFERR
  583.     END IF
  584. END SUB
  585.  
  586.  
  587. '*************************************************************************
  588. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  589. '$ifdef DEBUG
  590.     if szSymbol$ = "" then
  591.         nArg% = 1
  592.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  593.         nArg% = 2
  594.     else
  595.         nArg% = 0
  596.     end if
  597.     if nArg% > 0 then
  598.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  599.     end if
  600. '$endif ''DEBUG
  601.  
  602.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  603. '$ifdef DEBUG
  604.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  605. '$endif ''DEBUG
  606.         ERROR STFERR
  607.     END IF
  608. END SUB
  609.  
  610.  
  611. '**************************************************************************
  612. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  613. '$ifdef DEBUG
  614.     if szSymbol$ = "" then
  615.         n% = 1
  616.     elseif FValidInfSect(szSect$) = 0 then
  617.         n% = 2
  618.     else
  619.         n% = 0
  620.     end if
  621.     if n% > 0 then
  622.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  623.     end if
  624. '$endif ''DEBUG
  625.  
  626.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  627. '$ifdef DEBUG
  628.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  629. '$endif ''DEBUG
  630.         ERROR STFERR
  631.     END IF
  632. END SUB
  633.  
  634.  
  635. '*************************************************************************
  636. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  637. '$ifdef DEBUG
  638.     if szSymbol$ = "" then
  639.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  640.     end if
  641. '$endif ''DEBUG
  642.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  643. '$ifdef DEBUG
  644.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  645. '$endif ''DEBUG
  646.         ERROR STFERR
  647.     END IF
  648. END SUB
  649.  
  650.  
  651. '*************************************************************************
  652. SUB RemoveSymbol(szSym$) STATIC
  653. '$ifdef DEBUG
  654.     if szSym$ = "" then
  655.         BadArgErr 1, "RemoveSymbol", szSym$
  656.     end if
  657. '$endif ''DEBUG
  658.     IF FRemoveSymbol(szSym$) = 0 THEN
  659. '$ifdef DEBUG
  660.         StfApiErr saeFail, "RemoveSymbol", szSym$
  661. '$endif ''DEBUG
  662.         ERROR STFERR
  663.     END IF
  664. END SUB
  665.  
  666.  
  667. '*************************************************************************
  668. FUNCTION ShowWaitCursor STATIC AS INTEGER
  669.     ShowWaitCursor = HShowWaitCursor
  670. END FUNCTION
  671.  
  672.  
  673. '*************************************************************************
  674. SUB RestoreCursor (hPrev%) STATIC
  675.     i% = FRestoreCursor(hPrev%)
  676.     IF i% = 0 THEN
  677. '$ifdef DEBUG
  678.         StfApiErr saeFail, "RestoreCursor", ""
  679. '$endif ''DEBUG
  680.         ERROR STFERR
  681.     END IF
  682. END SUB
  683.  
  684.  
  685. '*************************************************************************
  686. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  687.     SetBeepingMode = FSetBeepingMode(mode%)
  688. END FUNCTION
  689.  
  690.  
  691. '*************************************************************************
  692. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  693.     SetSilentMode = FSetSilent(mode%)
  694. END FUNCTION
  695.  
  696.  
  697. '*************************************************************************
  698. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  699. '$ifdef DEBUG
  700.     if FValidInfSect(szSect$) = 0 then
  701.         n% = 1
  702.     elseif szKey$ = "" then
  703.         n% = 2
  704.     else
  705.         n% = 0
  706.     end if
  707.     if n% > 0 then
  708.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  709.     end if
  710. '$endif ''DEBUG
  711.  
  712.     szBuf$ = string$(128, 32)
  713.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  714.     IF Length% >= 128 THEN
  715.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  716.         ERROR STFERR
  717.     END IF
  718.  
  719.     IF Length% = -1 THEN
  720. '$ifdef DEBUG
  721.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  722. '$endif ''DEBUG
  723.         ERROR STFERR
  724.     END IF
  725.  
  726.     GetSectionKeyDate = szBuf$
  727.     szBuf$ = ""
  728. END FUNCTION
  729.  
  730.  
  731. '*************************************************************************
  732. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  733. '$ifdef DEBUG
  734.     if FValidInfSect(szSect$) = 0 then
  735.         n% = 1
  736.     elseif szKey$ = "" then
  737.         n% = 2
  738.     else
  739.         n% = 0
  740.     end if
  741.     if n% > 0 then
  742.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  743.     end if
  744. '$endif ''DEBUG
  745.  
  746.     szBuf$ = string$(128, 32)
  747.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  748.     IF Length% >= 128 THEN
  749.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  750.         ERROR STFERR
  751.     END IF
  752.  
  753.     IF Length% = -1 THEN
  754. '$ifdef DEBUG
  755.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  756. '$endif ''DEBUG
  757.         ERROR STFERR
  758.     END IF
  759.  
  760.     GetSectionKeyFilename = szBuf$
  761.     szBuf$ = ""
  762. END FUNCTION
  763.  
  764.  
  765. '*************************************************************************
  766. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  767. '$ifdef DEBUG
  768.     if FValidInfSect(szSect$) = 0 then
  769.         n% = 1
  770.     elseif szKey$ = "" then
  771.         n% = 2
  772.     else
  773.         n% = 0
  774.     end if
  775.     if n% > 0 then
  776.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  777.     end if
  778. '$endif ''DEBUG
  779.  
  780.     szBuf$ = string$(128, 32)
  781.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  782.     IF Length% >= 128 THEN
  783.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  784.         ERROR STFERR
  785.     END IF
  786.  
  787.     IF Length% = -1 THEN
  788. '$ifdef DEBUG
  789.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  790. '$endif ''DEBUG
  791.         ERROR STFERR
  792.     END IF
  793.  
  794.     GetSectionKeySize = VAL(szBuf$)
  795.     szBuf$ = ""
  796. END FUNCTION
  797.  
  798.  
  799. '*************************************************************************
  800. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  801. '$ifdef DEBUG
  802.     if FValidInfSect(szSect$) = 0 then
  803.         n% = 1
  804.     elseif szKey$ = "" then
  805.         n% = 2
  806.     else
  807.         n% = 0
  808.     end if
  809.     if n% > 0 then
  810.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  811.     end if
  812. '$endif ''DEBUG
  813.  
  814.     szBuf$ = string$(128, 32)
  815.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  816.     IF Length% >= 128 THEN
  817.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  818.         ERROR STFERR
  819.     END IF
  820.  
  821.     IF Length% = -1 THEN
  822. '$ifdef DEBUG
  823.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  824. '$endif ''DEBUG
  825.         ERROR STFERR
  826.     END IF
  827.  
  828.     GetSectionKeyVersion = szBuf$
  829.     szBuf$ = ""
  830. END FUNCTION
  831.  
  832.  
  833. '*************************************************************************
  834. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  835. '$ifdef DEBUG
  836.     if szSym$ = "" then
  837.         n% = 1
  838.     elseif FValidInfSect(szSect$) = 0 then
  839.         n% = 2
  840.     else
  841.         n% = 0
  842.     end if
  843.     if n% > 0 then
  844.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  845.     end if
  846. '$endif ''DEBUG
  847.  
  848.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  849. '$ifdef DEBUG
  850.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  851. '$endif ''DEBUG
  852.         ERROR STFERR
  853.     END IF
  854. END SUB
  855.  
  856.  
  857. '*************************************************************************
  858. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  859. '$ifdef DEBUG
  860.     if szSym$ = "" then
  861.         n% = 1
  862.     elseif FValidInfSect(szSect$) = 0 then
  863.         n% = 2
  864.     else
  865.         n% = 0
  866.     end if
  867.     if n% > 0 then
  868.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  869.     end if
  870. '$endif ''DEBUG
  871.  
  872.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  873. '$ifdef DEBUG
  874.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  875. '$endif ''DEBUG
  876.         ERROR STFERR
  877.     END IF
  878. END SUB
  879.  
  880.  
  881. '*************************************************************************
  882. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  883. '$ifdef DEBUG
  884.     if szSym$ = "" then
  885.         n% = 1
  886.     elseif FValidInfSect(szSect$) = 0 then
  887.         n% = 2
  888.     else
  889.         n% = 0
  890.     end if
  891.     if n% > 0 then
  892.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  893.     end if
  894. '$endif ''DEBUG
  895.  
  896.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  897. '$ifdef DEBUG
  898.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  899. '$endif ''DEBUG
  900.         ERROR STFERR
  901.     END IF
  902. END SUB
  903.  
  904.  
  905. '*************************************************************************
  906. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  907. '$ifdef DEBUG
  908.     if szSym$ = "" then
  909.         n% = 1
  910.     elseif FValidInfSect(szSect$) = 0 then
  911.         n% = 2
  912.     else
  913.         n% = 0
  914.     end if
  915.     if n% > 0 then
  916.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  917.     end if
  918. '$endif ''DEBUG
  919.  
  920.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  921. '$ifdef DEBUG
  922.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  923. '$endif ''DEBUG
  924.         ERROR STFERR
  925.     END IF
  926. END SUB
  927.  
  928.  
  929. '*************************************************************************
  930. SUB InitInstall STATIC
  931.     IF hSetup > 0 THEN
  932. '$ifdef DEBUG
  933.         StfApiErr saeInit, "InitInstall", ""
  934. '$endif ''DEBUG
  935.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  936. '$ifdef DEBUG
  937.         StfApiErr saeFail, "InitInstall", ""
  938. '$endif ''DEBUG
  939.         END
  940.     END IF
  941. END SUB
  942.  
  943.  
  944. '*************************************************************************
  945. SUB CreateDir (szDir$, cmo%) STATIC
  946. '$ifdef DEBUG
  947.     if FValidFATDir(szDir$) = 0 then
  948.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  949.     end if
  950. '$endif ''DEBUG
  951.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  952. '$ifdef DEBUG
  953.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  954. '$endif ''DEBUG
  955.         ERROR STFERR
  956.     END IF
  957. END SUB
  958.  
  959.  
  960. '*************************************************************************
  961. SUB RemoveDir (szDir$, cmo%) STATIC
  962. '$ifdef DEBUG
  963.     if FValidFATDir(szDir$) = 0 then
  964.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  965.     end if
  966. '$endif ''DEBUG
  967.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  968. '$ifdef DEBUG
  969.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  970. '$endif ''DEBUG
  971.         ERROR STFERR
  972.     END IF
  973. END SUB
  974.  
  975.  
  976.  
  977. '*************************************************************************
  978. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  979. '$ifdef DEBUG
  980.     if FValidIniFile(szFile$) = 0 then
  981.         n% = 1
  982.     elseif FValidInfSect(szSect$) = 0 then
  983.         n% = 2
  984.     else
  985.         n% = 0
  986.     end if
  987.     if n% > 0 then
  988.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  989.     end if
  990. '$endif ''DEBUG
  991.  
  992.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  993. '$ifdef DEBUG
  994.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  995. '$endif ''DEBUG
  996.         ERROR STFERR
  997.     END IF
  998. END SUB
  999.  
  1000.  
  1001. '*************************************************************************
  1002. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1003. '$ifdef DEBUG
  1004.     if FValidIniFile(szFile$) = 0 then
  1005.         n% = 1
  1006.     elseif FValidInfSect(szSect$) = 0 then
  1007.         n% = 2
  1008.     else
  1009.         n% = 0
  1010.     end if
  1011.     if n% > 0 then
  1012.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1013.     end if
  1014. '$endif ''DEBUG
  1015.  
  1016.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1017. '$ifdef DEBUG
  1018.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1019. '$endif ''DEBUG
  1020.         ERROR STFERR
  1021.     END IF
  1022. END SUB
  1023.  
  1024.  
  1025. '*************************************************************************
  1026. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  1027. '$ifdef DEBUG
  1028.     if FValidIniFile(szFile$) = 0 then
  1029.         n% = 1
  1030.     elseif FValidInfSect(szSect$) = 0 then
  1031.         n% = 2
  1032.     elseif szKey$ = "" then
  1033.         n% = 3
  1034.     else
  1035.         n% = 0
  1036.     end if
  1037.     if n% > 0 then
  1038.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1039.     end if
  1040. '$endif ''DEBUG
  1041.  
  1042.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1043. '$ifdef DEBUG
  1044.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1045. '$endif ''DEBUG
  1046.         ERROR STFERR
  1047.     END IF
  1048. END SUB
  1049.  
  1050.  
  1051. '*************************************************************************
  1052. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1053. '$ifdef DEBUG
  1054.     if FValidFATPath(szFile$) = 0 then
  1055.         n% = 1
  1056.     elseif FValidInfSect(szSect$) = 0 then
  1057.         n% = 2
  1058.     elseif szKey$ = "" then
  1059.         n% = 3
  1060.     else
  1061.         n% = 0
  1062.     end if
  1063.     if n% > 0 then
  1064.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1065.     end if
  1066. '$endif ''DEBUG
  1067.  
  1068.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1069. '$ifdef DEBUG
  1070.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1071. '$endif ''DEBUG
  1072.         ERROR STFERR
  1073.     END IF
  1074. END SUB
  1075.  
  1076.  
  1077. '*************************************************************************
  1078. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1079. '$ifdef DEBUG
  1080.     if szGroup$ = "" or len(szGroup$) > 24 then
  1081.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1082.     end if
  1083. '$endif ''DEBUG
  1084.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1085. '$ifdef DEBUG
  1086.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1087. '$endif ''DEBUG
  1088.         ERROR STFERR
  1089.     END IF
  1090. END SUB
  1091.  
  1092.  
  1093. '*************************************************************************
  1094. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1095. '$ifdef DEBUG
  1096.     if szGroup$ = "" or len(szGroup$) > 24 then
  1097.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1098.     end if
  1099. '$endif ''DEBUG
  1100.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1101. '$ifdef DEBUG
  1102.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1103. '$endif ''DEBUG
  1104.         ERROR STFERR
  1105.     END IF
  1106. END SUB
  1107.  
  1108.  
  1109. '*************************************************************************
  1110. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1111. '$ifdef DEBUG
  1112.     if FValidInfSect(szSect$) = 0 then
  1113.         n% = 1
  1114.     elseif szKey$ = "" then
  1115.         n% = 2
  1116.     elseif FValidFATDir(szDst$) = 0 then
  1117.         n% = 3
  1118.     else
  1119.         n% = 0
  1120.     end if
  1121.     if n% > 0 then
  1122.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1123.     end if
  1124. '$endif ''DEBUG
  1125.  
  1126.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1127. '$ifdef DEBUG
  1128.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1129. '$endif ''DEBUG
  1130.         ERROR STFERR
  1131.     END IF
  1132. END SUB
  1133.  
  1134.  
  1135. '*************************************************************************
  1136. SUB DumpCopyList (szFile$) STATIC
  1137. '$ifdef DEBUG
  1138.     if szFile$ = "" then
  1139.         BadArgErr 1, "DumpCopyList", szFile$
  1140.     end if
  1141. '$endif ''DEBUG
  1142.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1143. '$ifdef DEBUG
  1144.         StfApiErr saeFail, "DumpCopyList", szFile$
  1145. '$endif ''DEBUG
  1146.         ERROR STFERR
  1147.     END IF
  1148. END SUB
  1149.  
  1150.  
  1151. '*************************************************************************
  1152. SUB ClearCopyList STATIC
  1153.     ResetCopyList
  1154. END SUB
  1155.  
  1156.  
  1157. '*************************************************************************
  1158. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1159.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1160.     IF lNeed& < 0 THEN
  1161. '$ifdef DEBUG
  1162.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1163. '$endif ''DEBUG
  1164.         ERROR STFERR
  1165.     END IF
  1166.     GetCopyListCost = lNeed&
  1167. END FUNCTION
  1168.  
  1169.  
  1170. '*************************************************************************
  1171. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1172.     szItemNew$ = szItem$
  1173.     IF szOther$ <> "" THEN
  1174.         szItemNew$ = szItem$ + "," + szOther$
  1175.     END IF
  1176. '$ifdef DEBUG
  1177.     if szGroup$ = "" or len(szGroup$) > 24 then
  1178.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1179.     end if
  1180. '$endif ''DEBUG
  1181.  
  1182.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1183. '$ifdef DEBUG
  1184.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1185. '$endif ''DEBUG
  1186.         ERROR STFERR
  1187.     END IF
  1188.     szItemNew$ = ""
  1189. END SUB
  1190.  
  1191.  
  1192. '*************************************************************************
  1193. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1194. '$ifdef DEBUG
  1195.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1196.         n% = 1
  1197.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1198.         n% = 1
  1199.     elseif szProgHelp$ = "" then
  1200.         n% = 2
  1201.     else
  1202.         n% = 0
  1203.     end if
  1204.     if n% > 0 then
  1205.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1206.     end if
  1207. '$endif ''DEBUG
  1208.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1209. '$ifdef DEBUG
  1210.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1211. '$endif ''DEBUG
  1212.         ERROR STFERR
  1213.     END IF
  1214. END SUB
  1215.  
  1216.  
  1217. '*************************************************************************
  1218. SUB CopyFilesInCopyList STATIC
  1219.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1220.  
  1221.     IF grc% = grcUserQuit THEN
  1222.         ERROR STFQUIT
  1223.     ELSEIF grc% > 0 THEN
  1224. '$ifdef DEBUG
  1225.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1226. '$endif ''DEBUG
  1227.         ERROR STFERR
  1228.     END IF
  1229. END SUB
  1230.  
  1231.  
  1232. '*************************************************************************
  1233. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1234. '$ifdef DEBUG
  1235.     if FValidFATPath(szFullPathSrc$) = 0 then
  1236.         n% = 1
  1237.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1238.         n% = 2
  1239.     else
  1240.         n% = 0
  1241.     end if
  1242.     if n% > 0 then
  1243.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1244.     end if
  1245. '$endif ''DEBUG
  1246.  
  1247.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1248. '$ifdef DEBUG
  1249.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1250. '$endif ''DEBUG
  1251.         ERROR STFERR
  1252.     END IF
  1253. END SUB
  1254.  
  1255.  
  1256.  
  1257. '*************************************************************************
  1258. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1259. '$ifdef DEBUG
  1260.     if FValidFATPath(szFullPathSrc$) = 0 then
  1261.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1262.     end if
  1263. '$endif ''DEBUG
  1264.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1265. '$ifdef DEBUG
  1266.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1267. '$endif ''DEBUG
  1268.         ERROR STFERR
  1269.     END IF
  1270. END SUB
  1271.  
  1272.  
  1273. '*************************************************************************
  1274. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1275. '$ifdef DEBUG
  1276.     if FValidFATPath(szFullPath$) = 0 then
  1277.         n% = 1
  1278.     elseif szBackup$ = "" then
  1279.         n% = 2
  1280.     else
  1281.         n% = 0
  1282.     end if
  1283.     if n% > 0 then
  1284.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1285.     end if
  1286. '$endif ''DEBUG
  1287.  
  1288.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1289. '$ifdef DEBUG
  1290.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1291. '$endif ''DEBUG
  1292.         ERROR STFERR
  1293.     END IF
  1294. END SUB
  1295.  
  1296.  
  1297. '*************************************************************************
  1298. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1299. '$ifdef DEBUG
  1300.     if FValidFATPath(szFullPath$) = 0 then
  1301.         n% = 1
  1302.     elseif szBackup$ = "" then
  1303.         n% = 2
  1304.     else
  1305.         n% = 0
  1306.     end if
  1307.     if n% > 0 then
  1308.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1309.     end if
  1310. '$endif ''DEBUG
  1311.  
  1312.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1313. '$ifdef DEBUG
  1314.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1315. '$endif ''DEBUG
  1316.         ERROR STFERR
  1317.     END IF
  1318. END SUB
  1319.  
  1320.  
  1321. '*************************************************************************
  1322. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1323. '$ifdef DEBUG
  1324.     if FValidInfSect(szSect$) = 0 then
  1325.         n% = 1
  1326.     elseif FValidFATDir(szSrc$) = 0 then
  1327.         n% = 2
  1328.     elseif FValidFATDir(szDest$) = 0 then
  1329.         n% = 3
  1330.     else
  1331.         n% = 0
  1332.     end if
  1333.     if n% > 0 then
  1334.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1335.     end if
  1336. '$endif ''DEBUG
  1337.  
  1338.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1339. '$ifdef DEBUG
  1340.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1341. '$endif ''DEBUG
  1342.         ERROR STFERR
  1343.     END IF
  1344. END SUB
  1345.  
  1346.  
  1347. '*************************************************************************
  1348. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1349. '$ifdef DEBUG
  1350.     if FValidInfSect(szSect$) = 0 then
  1351.         n% = 1
  1352.     elseif szKey$ = "" then
  1353.         n% = 2
  1354.     elseif FValidFATDir(szSrc$) = 0 then
  1355.         n% = 3
  1356.     elseif FValidFATDir(szDest$) = 0 then
  1357.         n% = 4
  1358.     else
  1359.         n% = 0
  1360.     end if
  1361.     if n% > 0 then
  1362.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1363.     end if
  1364. '$endif ''DEBUG
  1365.  
  1366.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1367. '$ifdef DEBUG
  1368.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1369. '$endif ''DEBUG
  1370.         ERROR STFERR
  1371.     END IF
  1372. END SUB
  1373.  
  1374.  
  1375. '*************************************************************************
  1376. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1377. '$ifdef DEBUG
  1378.     if FValidInfSect(szSect$) = 0 then
  1379.         n% = 1
  1380.     elseif szKey$ = "" then
  1381.         n% = 2
  1382.     elseif FValidFATDir(szSrc$) = 0 then
  1383.         n% = 3
  1384.     elseif FValidFATPath(szDest$) = 0 then
  1385.         n% = 4
  1386.     else
  1387.         n% = 0
  1388.     end if
  1389.     if n% > 0 then
  1390.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1391.     end if
  1392. '$endif ''DEBUG
  1393.  
  1394.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1395. '$ifdef DEBUG
  1396.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1397. '$endif ''DEBUG
  1398.         ERROR STFERR
  1399.     END IF
  1400. END SUB
  1401.  
  1402.  
  1403. '*************************************************************************
  1404. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1405. '$ifdef DEBUG
  1406.     if szDll$ = "" then
  1407.         n% = 1
  1408.     elseif idDlg% = 0 then
  1409.         n% = 2
  1410.     elseif szProc$ = "" then
  1411.         n% = 3
  1412.     elseif lTicks& <= 0 then
  1413.         n% = 4
  1414.     else
  1415.         n% = 0
  1416.     end if
  1417.     if n% > 0 then
  1418.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1419.     end if
  1420. '$endif ''DEBUG
  1421.  
  1422.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1423. '$ifdef DEBUG
  1424.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1425. '$endif ''DEBUG
  1426.         ERROR STFERR
  1427.     END IF
  1428. END SUB
  1429.  
  1430.  
  1431. '*************************************************************************
  1432. SUB AddBlankToBillboardList (lTicks&) STATIC
  1433. '$ifdef DEBUG
  1434.     if lTicks& <= 0 then
  1435.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1436.     end if
  1437. '$endif ''DEBUG
  1438.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1439. '$ifdef DEBUG
  1440.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1441. '$endif ''DEBUG
  1442.         ERROR STFERR
  1443.     END IF
  1444. END SUB
  1445.  
  1446.  
  1447. '*************************************************************************
  1448. SUB ClearBillboardList STATIC
  1449.     IF FClearBillboardList = 0 THEN
  1450. '$ifdef DEBUG
  1451.         StfApiErr saeFail, "ClearBillboardList", ""
  1452. '$endif ''DEBUG
  1453.         ERROR STFERR
  1454.     END IF
  1455. END SUB
  1456.  
  1457.  
  1458. '*************************************************************************
  1459. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1460. '$ifdef DEBUG
  1461.     if FValidFATPath(szFile$) = 0 then
  1462.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1463.     end if
  1464. '$endif ''DEBUG
  1465.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1466. '$ifdef DEBUG
  1467.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1468. '$endif ''DEBUG
  1469.         ERROR STFERR
  1470.     END IF
  1471. END SUB
  1472.  
  1473.  
  1474. '*************************************************************************
  1475. SUB CloseLogFile STATIC
  1476.     IF FCloseLogFile() = 0 THEN
  1477. '$ifdef DEBUG
  1478.         StfApiErr saeFail, "CloseLogFile", ""
  1479. '$endif ''DEBUG
  1480.         ERROR STFERR
  1481.     END IF
  1482. END SUB
  1483.  
  1484.  
  1485. '*************************************************************************
  1486. SUB WriteToLogFile (szStr$) STATIC
  1487.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1488. '$ifdef DEBUG
  1489.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1490. '$endif ''DEBUG
  1491.         ERROR STFERR
  1492.     END IF
  1493. END SUB
  1494.  
  1495.  
  1496. ''' -1 in either parameter will mean 'center in frame client area'
  1497. '*************************************************************************
  1498. SUB SetCopyGaugePosition (x%, y%) STATIC
  1499.     ProSetPos x%, y%
  1500. END SUB
  1501.  
  1502.  
  1503. '*************************************************************************
  1504. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1505.     szBuf$ = STRING$(512, 32)
  1506.  
  1507.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1508.     IF wRet% = 0 THEN
  1509.         FindFileUsingFileOpen = szBuf$
  1510.     ELSEIF wRet% = 1 THEN
  1511.         FindFileUsingFileOpen = ""
  1512.     ELSE
  1513. '$ifdef DEBUG
  1514.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1515. '$endif ''DEBUG
  1516.         ERROR STFERR
  1517.     END IF
  1518.  
  1519.     szBuf$ = ""
  1520. END FUNCTION
  1521.  
  1522.  
  1523. '*************************************************************************
  1524. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1525.     IsDirWritable = FIsDirWritable(szDir$)
  1526. END FUNCTION
  1527.  
  1528.  
  1529. '*************************************************************************
  1530. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1531. '$ifdef DEBUG
  1532.     if FValidFATDir(szFile$) = 0 then
  1533.         BadArgErr 1, "IsFileWritable", szFile$
  1534.     end if
  1535. '$endif ''DEBUG
  1536.     IsFileWritable = FIsFileWritable(szFile$)
  1537. END FUNCTION
  1538.  
  1539.  
  1540. '*************************************************************************
  1541. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1542.     IF iField% < 1 THEN
  1543. '$ifdef DEBUG
  1544.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1545. '$endif ''DEBUG
  1546.         ERROR STFERR
  1547.     END IF
  1548.     szStart$ = szLine$
  1549.     IF iField% <> 1 THEN
  1550.         FOR i% = 2 TO iField% STEP 1
  1551.             iNew% = INSTR(szStart$, ",")
  1552.             IF iNew% = 0 THEN
  1553.                 GetNthFieldFromIniString = ""
  1554.                 GOTO _GNFFIS_END
  1555.             END IF
  1556.             szStart$ = MID$(szStart$, (iNew% + 1))
  1557.         NEXT
  1558.     END IF
  1559.  
  1560.     iNew% = INSTR(szStart$, ",")
  1561.     IF iNew% <> 0 THEN
  1562.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1563.     END IF
  1564.  
  1565.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1566.  
  1567. _GNFFIS_END:
  1568.  
  1569. END FUNCTION
  1570.  
  1571.  
  1572. '*************************************************************************
  1573. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1574.     GetWindowsMajorVersion = GetVersion() MOD 256
  1575. END FUNCTION
  1576.  
  1577.  
  1578. '*************************************************************************
  1579. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1580.     GetWindowsMinorVersion = GetVersion() / 256
  1581. END FUNCTION
  1582.  
  1583.  
  1584. '*************************************************************************
  1585. FUNCTION GetWindowsMode STATIC AS INTEGER
  1586.     GetWindowsMode = 0
  1587.     longTmp& = GetWinFlags()
  1588.     IF longTmp& AND WF_WINNT THEN
  1589.         GetWindowsMode = 3
  1590.     ELSEIF longTmp& AND WF_STANDARD THEN
  1591.         GetWindowsMode = 1
  1592.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1593.         GetWindowsMode = 2
  1594.     END IF
  1595. END FUNCTION
  1596.  
  1597.  
  1598. '*************************************************************************
  1599. FUNCTION GetWindowsDir STATIC AS STRING
  1600.     szBuf$ = string$(256, 32)
  1601.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1602.  
  1603.     IF cbBuf% = 0 THEN
  1604.         GetWindowsDir = ""
  1605. '$ifdef DEBUG
  1606.         StfApiErr saeFail, "GetWindowsDir", ""
  1607. '$endif ''DEBUG
  1608.         ERROR STFERR
  1609.     ELSE
  1610.         IF cbBuf% > 255 THEN
  1611.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1612.             ERROR STFERR
  1613.         END IF
  1614.         szBuf$ = RTRIM$(szBuf$)
  1615.         IF MID$(szBuf$, 1, 1) = "¥" THEN
  1616.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1617.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1618.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1619.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1620.         END IF
  1621.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "¥" THEN
  1622.             szBuf$ = szBuf$ + "¥"
  1623.         END IF
  1624.         GetWindowsDir = szBuf$
  1625.     END IF
  1626.  
  1627.     szBuf$ = ""
  1628. END FUNCTION
  1629.  
  1630.  
  1631. '*************************************************************************
  1632. FUNCTION GetWindowsSysDir STATIC AS STRING
  1633.     szBuf$ = string$(256, 32)
  1634.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1635.  
  1636.     IF cbBuf% = 0 THEN
  1637. '$ifdef DEBUG
  1638.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1639. '$endif ''DEBUG
  1640.         ERROR STFERR
  1641.     ELSE
  1642.         IF cbBuf% > 255 THEN
  1643.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1644.             ERROR STFERR
  1645.         END IF
  1646.         szBuf$ = RTRIM$(szBuf$)
  1647.         IF MID$(szBuf$, 1, 1) = "¥" THEN
  1648.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1649.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1650.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1651.         END IF
  1652.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "¥" THEN
  1653.             szBuf$ = szBuf$ + "¥"
  1654.         END IF
  1655.         GetWindowsSysDir = szBuf$
  1656.     END IF
  1657.  
  1658.     szBuf$ = ""
  1659. END FUNCTION
  1660.  
  1661.  
  1662. '*************************************************************************
  1663. FUNCTION IsWindowsShared STATIC AS INTEGER
  1664.     szWin$ = AnsiUpper(GetWindowsDir())
  1665.     szSys$ = AnsiUpper(GetWindowsSysDir())
  1666.  
  1667.     IF len(szWin$) = 0 THEN
  1668. '$ifdef DEBUG
  1669.         StfApiErr saeFail, "IsWindowsShared", ""
  1670. '$endif ''DEBUG
  1671.         ERROR STFERR
  1672.     END IF
  1673.  
  1674.     IF len(szSys$) <= len(szWin$) THEN
  1675.         IsWindowsShared = 1
  1676.     ELSE
  1677.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1678.         IF szWin$ = szSys$ THEN
  1679.             IsWindowsShared = 0
  1680.         ELSE
  1681.             IsWindowsShared = 1
  1682.         END IF
  1683.     END IF
  1684. END FUNCTION
  1685.  
  1686.  
  1687. '*************************************************************************
  1688. FUNCTION GetScreenWidth STATIC AS INTEGER
  1689.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1690. END FUNCTION
  1691.  
  1692.  
  1693. '*************************************************************************
  1694. FUNCTION GetScreenHeight STATIC AS INTEGER
  1695.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1696. END FUNCTION
  1697.  
  1698.  
  1699. '*************************************************************************
  1700. SUB SetRestartDir (szDir$) STATIC
  1701. '$ifdef DEBUG
  1702.     if FValidFATDir(szDir$) = 0 then
  1703.         BadArgErr 1, "SetRestartDir", szDir$
  1704.     end if
  1705. '$endif ''DEBUG
  1706.     IF FSetRestartDir(szDir$) = 0 THEN
  1707. '$ifdef DEBUG
  1708.         StfApiErr saeFail, "SetRestartDir", szDir$
  1709. '$endif ''DEBUG
  1710.         ERROR STFERR
  1711.     END IF
  1712. END SUB
  1713.  
  1714.  
  1715. '*************************************************************************
  1716. FUNCTION RestartListEmpty STATIC AS INTEGER
  1717.     IF FRestartListEmpty() = 0 THEN
  1718.         RestartListEmpty = 0
  1719.     ELSE
  1720.         RestartListEmpty = 1
  1721.     END IF
  1722. END FUNCTION
  1723.  
  1724.  
  1725. '*************************************************************************
  1726. FUNCTION ExitExecRestart STATIC AS INTEGER
  1727.     ExitExecRestart = FExitExecRestart
  1728. END FUNCTION
  1729.  
  1730.  
  1731. '*************************************************************************
  1732. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1733.  
  1734. '$ifdef DEBUG
  1735.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1736.         n% = 1
  1737.     elseif FValidFATPath(szDst$) = 0 then
  1738.         n% = 2
  1739.     elseif FValidFATDir(szDir$) = 0 then
  1740.         n% = 3
  1741.     else
  1742.         n% = 0
  1743.     end if
  1744.     if n% > 0 then
  1745.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1746.     end if
  1747. '$endif ''DEBUG
  1748.  
  1749.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1750. '$ifdef DEBUG
  1751.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1752. '$endif ''DEBUG
  1753.         ERROR STFERR
  1754.     END IF
  1755. END SUB
  1756.  
  1757.  
  1758. '*************************************************************************
  1759. FUNCTION IsDBCSChar (szText$, iPos%) STATIC AS INTEGER
  1760.     irt% = DIsDBCSChar(szText$, iPos%)
  1761.     if irt% < 0 THEN
  1762. '$ifdef DEBUG
  1763.         StfApiErr saeFail, "IsDBCSChar", szText$+", "+STR$(iPos%)
  1764. '$endif ''DEBUG
  1765.         ERROR STFERR
  1766.     else
  1767.         IsDBCSChar = irt%
  1768.     end if
  1769. END FUNCTION
  1770.  
  1771. '*************************************************************************
  1772. FUNCTION AnsiUpper (szBuf$) STATIC AS STRING
  1773.  
  1774.     cbBuf% = AnsiUpperBuff(szBuf$, LEN(szBuf$))
  1775.     AnsiUpper = szBuf$
  1776.  
  1777. END FUNCTION
  1778.  
  1779. '*************************************************************************
  1780. FUNCTION AnsiLower (szBuf$) STATIC AS STRING
  1781.  
  1782.     cbBuf% = AnsiLowerBuff(szBuf$, LEN(szBuf$))
  1783.     AnsiLower = szBuf$
  1784.  
  1785. END FUNCTION
  1786.  
  1787.  
  1788. '**************************************************************************
  1789. '***************************  Error Handlers  *****************************
  1790. '**************************************************************************
  1791.  
  1792.  
  1793. '$ifdef DEBUG
  1794. '**************************************************************************
  1795. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1796.     select case nMsg%
  1797.         case saeFail
  1798.             lpText$ = "Failed"
  1799.         case saeInit
  1800.             lpText$ = "Already Initialized"
  1801.         case saeNYI
  1802.             lpText$ = "NYI"
  1803.         case else
  1804.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1805.     end select
  1806.  
  1807.     lpText$ = lpText$ + ": "+ szApi$
  1808.     if szArgs$ <> "" then
  1809.         lpText$ = lpText + " (" + szArgs$ + ")"
  1810.     end if
  1811.     lpCaption$ = "MS-Setup Toolkit API Error"
  1812.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1813.     print lpText$
  1814.     lpText$ = ""
  1815.     lpCaption$ = ""
  1816. END SUB
  1817.  
  1818. '**************************************************************************
  1819. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1820.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1821.     ERROR STFERR
  1822. END SUB
  1823.  
  1824.  
  1825. '** REVIEW: Move this function into common lib (we'll need it there too)
  1826. '**************************************************************************
  1827. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1828.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1829.         FValidInfSect = 0
  1830.     else
  1831.         FValidInfSect = 1
  1832.     end if
  1833. END FUNCTION
  1834.  
  1835.  
  1836. '** REVIEW: Move this function into common lib (we'll need it there too)
  1837. '**************************************************************************
  1838. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1839.     if (FValidFATPath(szFile$) = 0) AND (AnsiUpper(szFile$) <> "WIN.INI") then
  1840.         FValidIniFile = 0
  1841.     else
  1842.         FValidIniFile = 1
  1843.     end if
  1844. END FUNCTION
  1845.  
  1846. '**************************************************************************
  1847. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1848.  
  1849.     if szDrive$ = "" then
  1850.         FValidDrive = 0
  1851.     elseif INSTR(1,szDrive$,"¥¥") = 1 then   ' UNC path
  1852.         FValidDrive = 1
  1853.     elseif ASC(AnsiUpper(szDrive$)) - ASC("A") < 0 then
  1854.         FValidDrive = 0
  1855.     elseif ASC(AnsiUpper(szDrive$)) - ASC("A") > 25 then
  1856.         FValidDrive = 0
  1857.     elseif LEN(szDrive$) = 1 then
  1858.         FValidDrive = 1
  1859.     elseif INSTR(2,szDrive$,":¥") = 2 then
  1860.         FValidDrive = 1
  1861.     elseif INSTR(1,szDrive$,":") = 2 then
  1862.         FValidDrive = 1
  1863.     else
  1864.         FValidDrive = 0
  1865.     end if
  1866. END FUNCTION
  1867.  
  1868. '$endif ''DEBUG
  1869.  
  1870.  
  1871. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1872.  
  1873. End Trap
  1874.  
  1875. hSetup = InitSetup(COMMAND$)
  1876.  
  1877. ON ERROR GOTO QUIT
  1878.